home *** CD-ROM | disk | FTP | other *** search
/ ADA Programming Guide / ADA Programming Guide.iso / adasmall / 4tasksem.ada < prev    next >
Text File  |  1996-01-30  |  2KB  |  111 lines

  1. with SMALL_SP; use SMALL_SP;
  2. procedure FOURTASK is
  3.  
  4.   SCREEN: SEMAPHORE := 1;
  5.  
  6.   task CYCLIC_1 is
  7.     entry START;
  8.   end CYCLIC_1;
  9.  
  10.   task CYCLIC_2 is
  11.     entry START;
  12.   end CYCLIC_2;
  13.  
  14.   task CYCLIC_3 is
  15.     entry START;
  16.   end CYCLIC_3;
  17.  
  18.   task CYCLIC_4 is
  19.     entry START;
  20.   end CYCLIC_4;
  21.  
  22.   task body CYCLIC_1 is
  23.     T : FLOAT;
  24.   begin
  25.     accept START;
  26.     WAIT(SCREEN);
  27.     CURSORAT(1,1); PUT("CYCLIC_1 RUNS EVERY 3.0 SECONDS");
  28.     SIGNAL(SCREEN);
  29.     T := CLOCK + 3.0;
  30.     for HOW_MANY in 1..20
  31.     loop
  32.       WAIT(SCREEN);
  33.       CURSORAT(2,1); PUT("       ");
  34.       SIGNAL(SCREEN);
  35.       delay T - CLOCK;
  36.       T := CLOCK + 3.0;
  37.       WAIT(SCREEN);
  38.       CURSORAT(2,1); PUT("RUNNING"); PUT(HOW_MANY);
  39.       SIGNAL(SCREEN);
  40.     end loop;
  41.   end CYCLIC_1;
  42.  
  43.   task body CYCLIC_2 is
  44.     T : FLOAT;
  45.   begin
  46.     accept START;
  47.     WAIT(SCREEN);
  48.     CURSORAT(3,1); PUT("CYCLIC_2 RUNS EVERY 5.0 SECONDS");
  49.     SIGNAL(SCREEN);
  50.     T := CLOCK + 5.0;
  51.     for HOW_MANY in 1..10
  52.     loop
  53.       WAIT(SCREEN);
  54.       CURSORAT(4,1); PUT("       ");
  55.       SIGNAL(SCREEN);
  56.       delay T - CLOCK;
  57.       T := CLOCK + 5.0;
  58.       WAIT(SCREEN);
  59.       CURSORAT(4,1); PUT("RUNNING"); PUT(HOW_MANY);
  60.       SIGNAL(SCREEN);
  61.     end loop;
  62.   end CYCLIC_2;
  63.  
  64.   task body CYCLIC_3 is
  65.     T : FLOAT;
  66.   begin
  67.     accept START;
  68.     WAIT(SCREEN);
  69.     CURSORAT(5,1); PUT("CYCLIC_3 RUNS EVERY 7.0 SECONDS");
  70.     SIGNAL(SCREEN);
  71.     T := CLOCK + 7.0;
  72.     for HOW_MANY in 1..10
  73.     loop
  74.       WAIT(SCREEN);
  75.       CURSORAT(6,1); PUT("       ");
  76.       SIGNAL(SCREEN);
  77.       delay T - CLOCK;
  78.       T := CLOCK + 7.0;
  79.       WAIT(SCREEN);
  80.       CURSORAT(6,1); PUT("RUNNING"); PUT(HOW_MANY);
  81.       SIGNAL(SCREEN);
  82.     end loop;
  83.   end CYCLIC_3;
  84.  
  85.   task body CYCLIC_4 is
  86.     T : FLOAT;
  87.   begin
  88.     accept START;
  89.     WAIT(SCREEN);
  90.     CURSORAT(7,1); PUT("CYCLIC_4 RUNS EVERY 9.0 SECONDS");
  91.     SIGNAL(SCREEN);
  92.     T := CLOCK + 9.0;
  93.     for HOW_MANY in 1..10 loop
  94.       WAIT(SCREEN);
  95.       CURSORAT(8,1); PUT("       ");
  96.       SIGNAL(SCREEN);
  97.       delay T - CLOCK;
  98.       T := CLOCK + 9.0;
  99.       WAIT(SCREEN);
  100.       CURSORAT(8,1); PUT("RUNNING"); PUT(HOW_MANY);
  101.       SIGNAL(SCREEN);
  102.     end loop;
  103.   end CYCLIC_4;
  104.  
  105. begin
  106.   CYCLIC_1.START;
  107.   CYCLIC_2.START;
  108.   CYCLIC_3.START;
  109.   CYCLIC_4.START;
  110. end FOURTASK;
  111.